package w16;

import java.util.Scanner;

public class S04 {
	//填写魔方阵，使方阵行、列、对角线上的数据和都相等
	public static void main(String[] args) {
		System.out.println("请输入奇数魔方阵的大小：");
		Scanner sc=new Scanner(System.in);
		int size = sc.nextInt();//获取魔方阵的大小
		sc.close();
		if(size%2==0)++size;//确保是奇数
		if(size<3)size=3;//确保最小是3X3的方阵
		int[][]fz=new int[size][size];
		for(int num=1,hang=0,lie=size/2;num<=size*size;++num) {
			fz[hang][lie]=num;//完成数据的填写
			//计算下个数据的填写位置
			if(num%size==0) { //是倍数，填写到下边
				++hang;
			}else {//不是倍数，填写到右上角
				--hang;
				++lie;
				if(hang<0)hang=size-1;//行号出界，调整到最大的行号
				if(lie==size)lie=0;//列号出界，调整到最小的列号
			}
		}
		for (int i = 0; i < size; ++i) {//循环完成一行的显示
			for (int j = 0; j < size; ++j) {//(1)显示一行的多个数据
				System.out.printf("%d\t", fz[i][j]);
			}
			System.out.println();//(2)显示换行
		}
	}
}
